home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / fld2_16 / folders2.bas < prev   
BASIC Source File  |  1994-12-31  |  53KB  |  1,345 lines

  1. ' FOLDERS-II v1.6 by Antonio Cordero. Original module by James Parr.
  2.  
  3. ' This module is Public Domain
  4.  
  5. ' This module allows you to use Folders without the need of a VBX control.
  6. ' The differences of version 1.0 with the original module by James Parr are
  7. ' the following:
  8. '  - 3D
  9. '  - More than a folder per form
  10. '  - Can use panels at the same time as folders
  11. '  - The Tabs text don't overwrite if too large
  12. '  - If more than a Tab row, the folder will adjust its position to see all of them
  13. '  - You can enable/disable each Tab
  14. '  - Accelerators to change the current Tab
  15.  
  16. ' Version 1.5:
  17. '  - Better support of form colors, no more necessary to be bright gray
  18. '  - FolderEnable, FolderDisable, FolderEnabled()
  19. '  - Can put a graphic in each Tab in every position: Left, Right, Top, Bottom
  20. '  - Better use of panel's area. Only the Caption is overwritten
  21. '  - Support for Folders inside Folders
  22. '  - Tab styles: Normal (Chamfered), Slanted, Chicago
  23. '  - Can specify offset between rows
  24. '  - Name changes:
  25. '      CurrentFolder() become CurrentTab()
  26. '      NumFolders()    become NumTabs()
  27. '  - Can share controls over all the Tabs of a Folder using SetFixedControl
  28. '  - TightenForm modified: don't change vertical position and allows space below
  29. '  - Multiple lines titles
  30. '  - Can know which Tab has been clicked before and after the change
  31.  
  32. ' Version 1.6:
  33. '  - First international version. Being released to the Internet
  34. '  - Changes and corrections to comments when traducing to English
  35. '  - Disabled graphics are a lot faster
  36. '  - New effect: 3D border selectable at left/right side of folder
  37. '  - New functions: FolderLeft, FolderTop, FolderWidth, FolderHeight
  38. '  - New sub: FolderMove
  39. '  - Bug with colors in folder with more than one row if inside a container
  40. '  - Corrected some other drawing bugs (too many)
  41. '  - New sub: ReDefineFolder
  42. '  - Can change number of tabs at runtime
  43. '  - New effect: overlapped or separated tabs
  44. '  - Colored Tabs (Compatibility WARNING: see FloodColor/ForeColor prop. below)
  45. '  - Changed: folders inside folders need to be inside a picturebox
  46. '             (problem with SSPanels not having ScaleMode property)
  47. '  - Can redefine X offset of Tabs diagonals in the Style parameter
  48.  
  49. ' For any sugerence or bug i can be reached at:
  50. '  - Internet E-mail: ccanto@eui.upm.es
  51. '  - "Las Profundidades del DEMo╤O" or ...uh..."The Deepnesses of the DEM'N" :-)
  52. '      +34(Spain)-1(Madrid)-7300942 (put message to cosysop NetDevil)
  53.  
  54. ' Form of use:
  55. ' ------------
  56. ' Create as much SSPanels (THREED.VBX) as tabs you want in the folder, all in a control array.
  57. ' If you want to use multiple lines captions, use "\$" as line separator.
  58. ' Put the following properties to the SSPanels:
  59. '   Caption        = the Tab title
  60. '   Alignment      = 0 - (Left Justify) - TOP
  61. '   BevelInner     = 0 - none
  62. '   BevelOuter     = 2 - raised
  63. '   BevelWidth     = 2
  64. '   BorderWidth    = 2
  65. '   Outline        = True
  66. '   RoundedCorners = False
  67. '   Tag            = folder identification, maybe the panels name
  68. '   BackColor      = as you like
  69. '   FloodColor     = background color for the tab
  70. '      (use the same as BackColor to be compatible with previous versions)
  71. '   ForeColor      = foreground color for the tab
  72. '
  73. ' Create two PictureBoxes that you will pass as parameters to DefineFolders. No
  74. '  properties needed.
  75. '
  76. ' If you want to use graphics in the tabs, create a control array of PictureBoxes that
  77. '  contain the graphics and with the Tag property the same as of the panels. If any of
  78. '  the PictureBoxes have no graphic (Picture=(none)) the corresponding tab will have
  79. '  no graphic. But you must make an array of N pictureboxes being N the number of
  80. '  panels.
  81.  
  82. ' Put in Form1.Load:
  83. '  Success% = DefineFolders (Index, NumTabsPerRow, Panel3D(0), FoldersTag,
  84. '                            TabPicture1, TabPicture2, Container, TabStyle,
  85. '                            RowOffset, PicturesPosition, GrayPictures,
  86. '                            LeftBorder, BetweenTabs)
  87. ' The parameters are:
  88. '  Index : index of the folder in the program, 0 to 49
  89. '  NumTabsPerRow : number of Tabs per row :). 0 means all in one row.
  90. '  Panel3D(0) : first element of an array of 3D panels created as said above.
  91. '               Index 0 panel will be the base for the others.
  92. '  FoldersTag : tag common to all the panels of the folder. Allows you to have
  93. '               other SSPanels in the same form assuming that they don't have
  94. '               this tag. It also allows you to put more than one folder in
  95. '               the form.
  96. '  TabPicture1 y TabPicture2 : the pictures created as said above.
  97. '  Container : keyword Nothing if the folder is directly in a Form, or, the
  98. '              container control. The container control must have the ScaleMode
  99. '              property, so the best choice is a PictureBox.
  100. '  TabStyle : low byte: 0 = Chamfered, 1 = Slanted, 2 = Chicago
  101. '             high byte: X offset of Tabs diagonals (0=default) (pixels)
  102. '                        (only for Chamfered and Slanted, i.e. &H0601 = Slanted
  103. '                         with diagonal.X = 6)
  104. '  RowOffset : horizontal offset between rows (pixels).
  105. '  PicturesPosition : graphics position: 0 = Left, 1 = Right, 2 = Top, 3 = Bottom
  106. '  GrayPictures : True if the graphics must be grayed when disabled.
  107. '  LeftBorder : True if the 3D border of not-first rows is at the left side.
  108. '  BetweenTabs : number of pixels between tabs. Can be negative to make
  109. '                overlapped tabs (pixels).
  110.  
  111. ' If you want to use accelerators to access a tab, make form1.KeyPreview = TRUE
  112. ' and put in form1.KeyUp:
  113. '  keycode = GotoFolderByAccel(Index, keycode, shift)
  114. ' Being Index the folder index in the program
  115. '
  116. ' WARNING: If you click the keys to access a tab and that tab is the current,
  117. '          the control who have the focus could be activated (clicked).
  118. '          The solution is to make the TabStop property to False in all the
  119. '          controls of the folder.
  120.  
  121. ' Put in TabPicture1.MouseUp:
  122. '  FolderClick Index, Button, X, Y
  123. ' or:
  124. '  i = FolderClickFn (Index, Button, X, Y)
  125. ' Being Index the index to the folder (0-49).
  126. ' The function FolderClickFn returns the selected tab (0 is first)
  127. ' Your can use the function FolderClicked(Index, X, Y) before FolderClick or
  128. '  FolderClickFn to know which tab will be selected before it changes.
  129.  
  130. ' If you want to use shared controls, create them in the first panel (index 0)
  131. '  and, in Form1.Load, after the DefineFolders command:
  132. '    SetFixedControl Index, Control
  133. '  for each shared control (if a control is inside a container, only use
  134. '  SetFixedControl with the container), being Index the index to the folder
  135. '  in the program. Also put in Form1.Unload:
  136. '    ResetFixedControls Index
  137. ' Controls of types Label, Shape, Line, Image, and others without hWnd property
  138. '  cannot be shared, but you can share them if you put them inside a container
  139. '  that have a hWnd property, a picturebox, for example.
  140. ' The best method to share controls is to put them inside a PictureBox and then
  141. '  share only this PictureBox.
  142.  
  143. ' You can use the following routines (Index is the index of the folder):
  144. '  n = CurrentTab (Index) : gets the current tab
  145. '  n = NumTabs (Index) : gets the number of tabs in the folder
  146. '  NextFolder Index : displays the next tab
  147. '  PrevFolder Index : displays the previous tab
  148. '  GotoFolder Index, TabNumber : displays the tab TabNumber (first is 0)
  149. '  TightenForm Index, BelowSpace, NoBorders : adjusts the form around the folder
  150. '                                             with BelowSpace below the folder and
  151. '                                             optional visible borders.
  152. '  TabEnable Index, TabNumber  : enables the tab TabNumber
  153. '  TabDisable Index, TabNumber : disables the tab TabNumber
  154. '  flag% = TabEnabled (Index, TabNumber)  : returns TRUE if the tab TabNumber
  155. '                                           is enabled
  156. '  FolderEnable Index  : enables the folder
  157. '  FolderDisable Index : disables the folder
  158. '  flag% = FolderEnabled (Index) : returns TRUE if the folder is en